<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <title>个人推荐-20210809090409-vwu5ig1</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
            overflow: visible;
            position: relative;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            overflow: visible;
            display: block;
            margin:5px auto;
            margin-bottom: 5px;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="main-content">
        <div id="svg-container"><svg xmlns="http://www.w3.org/2000/svg" ed:hSpacing="30" ed:vSpacing="30" id="page0" height="1617" preserveAspectRadio="xMinYMin meet" xmlns:ev="http://www.w3.org/2001/xml-events" width="1509" xmlns:ed="https://www.edrawsoft.cn/xml/2017/SVGExtensions/" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1509 1617" ed:name="页面-1">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st38 {fill:#000000;font-family:微软雅黑;font-size:12pt}
.st37 {fill:#b03f71;font-weight:bold}
.st31 {fill:#b03f71}
.st33 {fill:#ca1083;font-weight:bold}
.st42 {fill:#e85464;font-weight:bold}
.st30 {fill:#ebebeb;font-family:微软雅黑;font-size:12pt;font-weight:bold}
.st36 {fill:#ebebeb;font-family:微软雅黑;font-size:12pt}
.st39 {fill:#ebebeb;font-weight:bold}
.st40 {fill:#ebebeb}
.st41 {fill:#ffffff;font-family:微软雅黑;font-size:10pt}
.st34 {fill:#ffffff;font-family:微软雅黑;font-size:11pt}
.st29 {fill:#ffffff;font-family:微软雅黑;font-size:12pt;font-weight:bold}
.st32 {fill:#ffffff;font-family:微软雅黑;font-size:12pt}
.st35 {font-size:12pt}
]]></style>
    <defs/>
    <rect fill="#1b222b" y="0" x="0" height="1617" width="1509"/>
    <path fill="none" id="208" stroke-width="2" ed:parentid="227" d="M-6.5,3.2C-6.5,0.6,3.1,-3.2,17.5,-3.2" stroke-linejoin="round" ed:tosuperid="228" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,288.5)" stroke-linecap="round"/>
    <path fill="none" id="209" stroke-width="2" ed:parentid="227" d="M-6.5,91C-6.5,18.2,3.1,-91,17.5,-91" stroke-linejoin="round" ed:tosuperid="229" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,200.68)" stroke-linecap="round"/>
    <path fill="none" id="211" stroke-width="2" ed:parentid="228" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="231" stroke="#f5c759" transform="matrix(1,0,0,1,444.16,285.3)" stroke-linecap="round"/>
    <path fill="none" id="212" stroke-width="2" ed:parentid="227" d="M-6.5,-112.6C-6.5,-22.5,3.1,112.6,17.5,112.6" stroke-linejoin="round" ed:tosuperid="232" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,404.35)" stroke-linecap="round"/>
    <path fill="none" id="214" stroke-width="2" ed:parentid="227" d="M-6.5,-129.2C-6.5,-25.8,3.1,129.2,17.5,129.2" stroke-linejoin="round" ed:tosuperid="234" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,420.9)" stroke-linecap="round"/>
    <path fill="none" id="215" stroke-width="2" ed:parentid="227" d="M-6.5,-71.3C-6.5,-14.3,3.1,71.3,17.5,71.3" stroke-linejoin="round" ed:tosuperid="235" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,362.98)" stroke-linecap="round"/>
    <path fill="none" id="216" stroke-width="2" ed:parentid="235" d="M-17.5,24.8L-6.5,24.8C-6.5,5,3.1,-24.8,17.5,-24.8" stroke-linejoin="round" ed:tosuperid="236" stroke="#f5c759" transform="matrix(1,0,0,1,466.56,409.42)" stroke-linecap="round"/>
    <path fill="none" id="217" stroke-width="2" ed:parentid="235" d="M-6.5,8.3C-6.5,1.7,3.1,-8.3,17.5,-8.3" stroke-linejoin="round" ed:tosuperid="237" stroke="#f5c759" transform="matrix(1,0,0,1,466.56,425.97)" stroke-linecap="round"/>
    <path fill="none" id="218" stroke-width="2" ed:parentid="235" d="M-6.5,-8.3C-6.5,-1.7,3.1,8.3,17.5,8.3" stroke-linejoin="round" ed:tosuperid="238" stroke="#f5c759" transform="matrix(1,0,0,1,466.56,442.52)" stroke-linecap="round"/>
    <path fill="none" id="219" stroke-width="2" ed:parentid="235" d="M-6.5,-24.8C-6.5,-5,3.1,24.8,17.5,24.8" stroke-linejoin="round" ed:tosuperid="239" stroke="#f5c759" transform="matrix(1,0,0,1,466.56,459.07)" stroke-linecap="round"/>
    <path fill="none" id="220" stroke-width="2" ed:parentid="227" d="M-6.5,52.9C-6.5,10.6,3.1,-52.9,17.5,-52.9" stroke-linejoin="round" ed:tosuperid="240" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,238.85)" stroke-linecap="round"/>
    <path fill="none" id="222" stroke-width="2" ed:parentid="231" d="M-17.5,33.1L-6.5,33.1C-6.5,6.6,3.1,-33.1,17.5,-33.1" stroke-linejoin="round" ed:tosuperid="242" stroke="#f5c759" transform="matrix(1,0,0,1,643.26,252.2)" stroke-linecap="round"/>
    <path fill="none" id="223" stroke-width="2" ed:parentid="231" d="M-6.5,16.6C-6.5,3.3,3.1,-16.6,17.5,-16.6" stroke-linejoin="round" ed:tosuperid="243" stroke="#f5c759" transform="matrix(1,0,0,1,643.26,268.75)" stroke-linecap="round"/>
    <path fill="none" id="224" stroke-width="2" ed:parentid="231" d="M-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="244" stroke="#f5c759" transform="matrix(1,0,0,1,643.26,285.3)" stroke-linecap="round"/>
    <path fill="none" id="225" stroke-width="2" ed:parentid="231" d="M-6.5,-16.5C-6.5,-3.3,3.1,16.5,17.5,16.5" stroke-linejoin="round" ed:tosuperid="245" stroke="#f5c759" transform="matrix(1,0,0,1,643.26,301.85)" stroke-linecap="round"/>
    <path fill="none" id="226" stroke-width="2" ed:parentid="231" d="M-6.5,-33.1C-6.5,-6.6,3.1,33.1,17.5,33.1" stroke-linejoin="round" ed:tosuperid="246" stroke="#f5c759" transform="matrix(1,0,0,1,643.26,318.4)" stroke-linecap="round"/>
    <path fill="#f5c759" id="247" ed:parentid="101" d="M-37.9,179.3C-38.5,181,-38,182.5,-36.7,183.1C-35.5,183.6,-33.9,183,-33.3,181.3C-32.4,179.1,-31.5,176.9,-30.7,174.6C-29.9,172.4,-29.2,170.1,-28.5,167.8C-27.9,165.5,-27.3,163.3,-26.7,161C-26.1,158.7,-25.6,156.4,-25.1,154.1C-24.6,151.8,-24.2,149.5,-23.7,147.1C-23.3,144.8,-22.9,142.5,-22.5,140.2C-22.2,137.9,-21.8,135.6,-21.5,133.2C-21.1,130.9,-20.8,128.6,-20.5,126.3C-20.2,123.9,-19.9,121.6,-19.7,119.3C-19.4,117,-19.1,114.6,-18.9,112.3C-18.7,110,-18.4,107.6,-18.2,105.3C-18,103,-17.8,100.7,-17.6,98.3C-17.4,96,-17.2,93.7,-17,91.3C-16.9,89,-16.7,86.7,-16.5,84.3C-16.4,82,-16.2,79.7,-16.1,77.3C-15.9,75,-15.8,72.7,-15.6,70.3C-15.5,68,-15.3,65.7,-15.2,63.4C-15.1,61,-14.9,58.7,-14.8,56.4C-14.7,54,-14.6,51.7,-14.5,49.4C-14.3,47,-14.2,44.7,-14.1,42.4C-14,40,-13.9,37.7,-13.8,35.4C-13.7,33,-13.6,30.7,-13.4,28.4C-13.3,26,-13.2,23.7,-13.1,21.4C-13,19.1,-12.9,16.7,-12.8,14.4C-12.7,12.1,-12.6,9.7,-12.5,7.4C-12.4,5.1,-12.2,2.7,-12.1,0.4C-12,-1.9,-11.9,-4.2,-11.8,-6.6C-11.7,-8.9,-11.5,-11.2,-11.4,-13.6C-11.3,-15.9,-11.2,-18.2,-11,-20.6C-10.9,-22.9,-10.8,-25.2,-10.6,-27.5C-10.5,-29.9,-10.4,-32.2,-10.2,-34.5C-10.1,-36.8,-9.9,-39.2,-9.8,-41.5C-9.6,-43.8,-9.4,-46.1,-9.3,-48.5C-9.1,-50.8,-8.9,-53.1,-8.8,-55.4C-8.6,-57.8,-8.4,-60.1,-8.2,-62.4C-8,-64.7,-7.8,-67.1,-7.6,-69.4C-7.4,-71.7,-7.1,-74,-6.9,-76.3C-6.7,-78.7,-6.4,-81,-6.2,-83.3C-5.9,-85.6,-5.6,-87.9,-5.4,-90.2C-5.1,-92.5,-4.8,-94.8,-4.5,-97.2C-4.2,-99.5,-3.9,-101.8,-3.5,-104.1C-3.2,-106.4,-2.8,-108.7,-2.5,-111C-2.1,-113.3,-1.7,-115.6,-1.3,-117.9C-0.9,-120.2,-0.5,-122.4,-0,-124.7C0.4,-127,0.9,-129.3,1.4,-131.6C1.9,-133.8,2.4,-136.1,3,-138.4C3.5,-140.6,4.1,-142.9,4.7,-145.1C5.3,-147.3,6,-149.6,6.7,-151.8C7.4,-154,8.1,-156.2,8.9,-158.4C9.6,-160.6,10.5,-162.8,11.3,-164.9C12.2,-167.1,13.1,-169.2,14.1,-171.3C15.1,-173.4,16.2,-175.4,17.3,-177.5C18.4,-179.5,19.6,-181.5,20.9,-183.4C22.2,-185.3,23.6,-187.2,25.1,-188.9C26.5,-190.7,28.1,-192.4,29.8,-194C31.5,-195.6,33.2,-197,35.1,-198.3C37,-199.6,39.1,-200.8,41.1,-201.8C43.2,-202.7,45.2,-203.5,47.6,-204.1C49.9,-204.8,52.5,-205.2,54.4,-205.4C56.3,-205.6,57.5,-205.6,58.7,-205.6C59.1,-205.6,59.3,-205.8,59.3,-206.1C59.3,-206.4,59.1,-206.6,58.7,-206.6C57.5,-206.6,56.2,-206.6,54.3,-206.4C52.3,-206.2,49.7,-205.8,47.3,-205.2C44.9,-204.6,42.7,-203.8,40.6,-202.8C38.5,-201.9,36.4,-200.7,34.4,-199.3C32.5,-198,30.6,-196.5,28.9,-194.9C27.1,-193.3,25.5,-191.6,24,-189.8C22.5,-188,21,-186.1,19.7,-184.2C18.4,-182.2,17.1,-180.2,16,-178.2C14.8,-176.2,13.7,-174.1,12.7,-172C11.7,-169.8,10.7,-167.7,9.8,-165.5C8.9,-163.4,8.1,-161.2,7.2,-159C6.4,-156.8,5.7,-154.6,5,-152.3C4.3,-150.1,3.6,-147.9,2.9,-145.6C2.3,-143.3,1.7,-141.1,1.1,-138.8C0.5,-136.5,-0,-134.3,-0.6,-132C-1.1,-129.7,-1.6,-127.4,-2,-125.1C-2.5,-122.8,-3,-120.5,-3.4,-118.2C-3.8,-115.9,-4.2,-113.6,-4.6,-111.3C-5,-109,-5.4,-106.7,-5.8,-104.4C-6.1,-102.1,-6.5,-99.8,-6.8,-97.5C-7.1,-95.2,-7.4,-92.8,-7.7,-90.5C-8,-88.2,-8.3,-85.9,-8.6,-83.6C-8.9,-81.2,-9.1,-78.9,-9.4,-76.6C-9.7,-74.3,-9.9,-71.9,-10.1,-69.6C-10.4,-67.3,-10.6,-65,-10.8,-62.6C-11,-60.3,-11.3,-58,-11.5,-55.7C-11.7,-53.3,-11.9,-51,-12.1,-48.7C-12.2,-46.4,-12.4,-44,-12.6,-41.7C-12.8,-39.4,-13,-37,-13.1,-34.7C-13.3,-32.4,-13.5,-30.1,-13.6,-27.7C-13.8,-25.4,-13.9,-23.1,-14.1,-20.7C-14.2,-18.4,-14.4,-16.1,-14.5,-13.7C-14.7,-11.4,-14.8,-9.1,-15,-6.8C-15.1,-4.4,-15.2,-2.1,-15.4,0.2C-15.5,2.6,-15.6,4.9,-15.8,7.2C-15.9,9.6,-16,11.9,-16.2,14.2C-16.3,16.5,-16.4,18.9,-16.6,21.2C-16.7,23.5,-16.8,25.9,-17,28.2C-17.1,30.5,-17.2,32.9,-17.4,35.2C-17.5,37.5,-17.6,39.8,-17.8,42.2C-17.9,44.5,-18,46.8,-18.2,49.2C-18.3,51.5,-18.5,53.8,-18.6,56.1C-18.8,58.5,-18.9,60.8,-19.1,63.1C-19.2,65.4,-19.4,67.8,-19.5,70.1C-19.7,72.4,-19.9,74.7,-20,77.1C-20.2,79.4,-20.4,81.7,-20.6,84C-20.8,86.4,-21,88.7,-21.2,91C-21.4,93.3,-21.6,95.6,-21.8,98C-22,100.3,-22.2,102.6,-22.5,104.9C-22.7,107.2,-23,109.5,-23.2,111.8C-23.5,114.1,-23.7,116.5,-24,118.8C-24.3,121.1,-24.6,123.4,-24.9,125.7C-25.3,128,-25.6,130.3,-25.9,132.6C-26.3,134.9,-26.7,137.2,-27.1,139.4C-27.5,141.7,-27.9,144,-28.3,146.3C-28.8,148.5,-29.2,150.8,-29.7,153.1C-30.3,155.3,-30.8,157.6,-31.4,159.8C-31.9,162,-32.6,164.2,-33.2,166.4C-33.9,168.6,-34.6,170.8,-35.4,173C-36.1,175.1,-37,177.2,-37.9,179.3z" stroke-linejoin="round" ed:tosuperid="227" stroke="#f5c759" transform="matrix(1,0,0,1,134.18,497.82)" stroke-linecap="round"/>
    <path fill="none" id="143" stroke-width="2" ed:parentid="240" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="142" stroke="#f5c759" transform="matrix(1,0,0,1,498.56,186)" stroke-linecap="round"/>
    <path fill="none" id="152" stroke-width="2" ed:parentid="236" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="151" stroke="#f5c759" transform="matrix(1,0,0,1,585.66,384.6)" stroke-linecap="round"/>
    <path fill="#f5c759" id="155" ed:parentid="101" d="M-33.3,-181.3C-33.9,-183,-35.5,-183.6,-36.7,-183.1C-38,-182.5,-38.5,-181,-37.9,-179.3C-37,-177.2,-36.1,-175.1,-35.4,-173C-34.6,-170.8,-33.9,-168.6,-33.2,-166.4C-32.6,-164.2,-31.9,-162,-31.4,-159.8C-30.8,-157.6,-30.3,-155.3,-29.7,-153.1C-29.2,-150.8,-28.8,-148.5,-28.3,-146.3C-27.9,-144,-27.5,-141.7,-27.1,-139.4C-26.7,-137.2,-26.3,-134.9,-25.9,-132.6C-25.6,-130.3,-25.3,-128,-24.9,-125.7C-24.6,-123.4,-24.3,-121.1,-24,-118.8C-23.7,-116.5,-23.5,-114.1,-23.2,-111.8C-23,-109.5,-22.7,-107.2,-22.5,-104.9C-22.2,-102.6,-22,-100.3,-21.8,-98C-21.6,-95.6,-21.4,-93.3,-21.2,-91C-21,-88.7,-20.8,-86.4,-20.6,-84C-20.4,-81.7,-20.2,-79.4,-20,-77.1C-19.9,-74.7,-19.7,-72.4,-19.5,-70.1C-19.4,-67.8,-19.2,-65.4,-19.1,-63.1C-18.9,-60.8,-18.8,-58.5,-18.6,-56.1C-18.5,-53.8,-18.3,-51.5,-18.2,-49.2C-18,-46.8,-17.9,-44.5,-17.8,-42.2C-17.6,-39.8,-17.5,-37.5,-17.4,-35.2C-17.2,-32.9,-17.1,-30.5,-17,-28.2C-16.8,-25.9,-16.7,-23.5,-16.6,-21.2C-16.4,-18.9,-16.3,-16.5,-16.2,-14.2C-16,-11.9,-15.9,-9.6,-15.8,-7.2C-15.6,-4.9,-15.5,-2.6,-15.4,-0.2C-15.2,2.1,-15.1,4.4,-15,6.8C-14.8,9.1,-14.7,11.4,-14.5,13.7C-14.4,16.1,-14.2,18.4,-14.1,20.7C-13.9,23.1,-13.8,25.4,-13.6,27.7C-13.5,30.1,-13.3,32.4,-13.1,34.7C-13,37,-12.8,39.4,-12.6,41.7C-12.4,44,-12.2,46.4,-12.1,48.7C-11.9,51,-11.7,53.3,-11.5,55.7C-11.3,58,-11,60.3,-10.8,62.6C-10.6,65,-10.4,67.3,-10.1,69.6C-9.9,71.9,-9.7,74.3,-9.4,76.6C-9.1,78.9,-8.9,81.2,-8.6,83.6C-8.3,85.9,-8,88.2,-7.7,90.5C-7.4,92.8,-7.1,95.2,-6.8,97.5C-6.5,99.8,-6.1,102.1,-5.8,104.4C-5.4,106.7,-5,109,-4.6,111.3C-4.2,113.6,-3.8,115.9,-3.4,118.2C-3,120.5,-2.5,122.8,-2,125.1C-1.6,127.4,-1.1,129.7,-0.6,132C-0,134.3,0.5,136.5,1.1,138.8C1.7,141.1,2.3,143.3,2.9,145.6C3.6,147.9,4.3,150.1,5,152.3C5.7,154.6,6.4,156.8,7.2,159C8.1,161.2,8.9,163.4,9.8,165.5C10.7,167.7,11.7,169.8,12.7,172C13.7,174.1,14.8,176.2,16,178.2C17.1,180.2,18.4,182.2,19.7,184.2C21,186.1,22.5,188,24,189.8C25.5,191.6,27.1,193.3,28.9,194.9C30.6,196.5,32.5,198,34.4,199.3C36.4,200.7,38.5,201.9,40.6,202.8C42.7,203.8,44.9,204.6,47.3,205.2C49.7,205.8,52.3,206.2,54.3,206.4C56.2,206.6,57.5,206.6,58.7,206.6C59.1,206.6,59.3,206.4,59.3,206.1C59.3,205.8,59.1,205.6,58.7,205.6C57.5,205.6,56.3,205.6,54.4,205.4C52.5,205.2,49.9,204.8,47.6,204.1C45.2,203.5,43.2,202.7,41.1,201.8C39.1,200.8,37,199.6,35.1,198.3C33.2,197,31.5,195.6,29.8,194C28.1,192.4,26.5,190.7,25.1,188.9C23.6,187.2,22.2,185.3,20.9,183.4C19.6,181.5,18.4,179.5,17.3,177.5C16.2,175.4,15.1,173.4,14.1,171.3C13.1,169.2,12.2,167.1,11.3,164.9C10.5,162.8,9.6,160.6,8.9,158.4C8.1,156.2,7.4,154,6.7,151.8C6,149.6,5.3,147.3,4.7,145.1C4.1,142.9,3.5,140.6,3,138.4C2.4,136.1,1.9,133.8,1.4,131.6C0.9,129.3,0.4,127,-0,124.7C-0.5,122.4,-0.9,120.2,-1.3,117.9C-1.7,115.6,-2.1,113.3,-2.5,111C-2.8,108.7,-3.2,106.4,-3.5,104.1C-3.9,101.8,-4.2,99.5,-4.5,97.2C-4.8,94.8,-5.1,92.5,-5.4,90.2C-5.6,87.9,-5.9,85.6,-6.2,83.3C-6.4,81,-6.7,78.7,-6.9,76.3C-7.1,74,-7.4,71.7,-7.6,69.4C-7.8,67.1,-8,64.7,-8.2,62.4C-8.4,60.1,-8.6,57.8,-8.8,55.4C-8.9,53.1,-9.1,50.8,-9.3,48.5C-9.4,46.1,-9.6,43.8,-9.8,41.5C-9.9,39.2,-10.1,36.8,-10.2,34.5C-10.4,32.2,-10.5,29.9,-10.6,27.5C-10.8,25.2,-10.9,22.9,-11,20.6C-11.2,18.2,-11.3,15.9,-11.4,13.6C-11.5,11.2,-11.7,8.9,-11.8,6.6C-11.9,4.2,-12,1.9,-12.1,-0.4C-12.2,-2.7,-12.4,-5.1,-12.5,-7.4C-12.6,-9.7,-12.7,-12.1,-12.8,-14.4C-12.9,-16.7,-13,-19.1,-13.1,-21.4C-13.2,-23.7,-13.3,-26,-13.4,-28.4C-13.6,-30.7,-13.7,-33,-13.8,-35.4C-13.9,-37.7,-14,-40,-14.1,-42.4C-14.2,-44.7,-14.3,-47,-14.5,-49.4C-14.6,-51.7,-14.7,-54,-14.8,-56.4C-14.9,-58.7,-15.1,-61,-15.2,-63.4C-15.3,-65.7,-15.5,-68,-15.6,-70.3C-15.8,-72.7,-15.9,-75,-16.1,-77.3C-16.2,-79.7,-16.4,-82,-16.5,-84.3C-16.7,-86.7,-16.9,-89,-17,-91.3C-17.2,-93.7,-17.4,-96,-17.6,-98.3C-17.8,-100.7,-18,-103,-18.2,-105.3C-18.4,-107.6,-18.7,-110,-18.9,-112.3C-19.1,-114.6,-19.4,-117,-19.7,-119.3C-19.9,-121.6,-20.2,-123.9,-20.5,-126.3C-20.8,-128.6,-21.1,-130.9,-21.5,-133.2C-21.8,-135.6,-22.2,-137.9,-22.5,-140.2C-22.9,-142.5,-23.3,-144.8,-23.7,-147.1C-24.2,-149.5,-24.6,-151.8,-25.1,-154.1C-25.6,-156.4,-26.1,-158.7,-26.7,-161C-27.3,-163.3,-27.9,-165.5,-28.5,-167.8C-29.2,-170.1,-29.9,-172.4,-30.7,-174.6C-31.5,-176.9,-32.4,-179.1,-33.3,-181.3z" stroke-linejoin="round" ed:tosuperid="153" stroke="#f5c759" transform="matrix(1,0,0,1,134.18,910.06)" stroke-linecap="round"/>
    <path fill="none" id="157" stroke-width="2" ed:parentid="153" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="156" stroke="#f5c759" transform="matrix(1,0,0,1,327.46,1116.17)" stroke-linecap="round"/>
    <path fill="none" id="167" stroke-width="2" ed:parentid="156" d="M-6.5,-215C-6.5,-43,3.1,215,17.5,215" stroke-linejoin="round" ed:tosuperid="166" stroke="#f5c759" transform="matrix(1,0,0,1,420.16,1331.14)" stroke-linecap="round"/>
    <path fill="none" id="169" stroke-width="2" ed:parentid="166" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="168" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1546.1)" stroke-linecap="round"/>
    <path fill="none" id="171" stroke-width="2" ed:parentid="156" d="M-6.5,49.8C-6.5,10,3.1,-49.8,17.5,-49.8" stroke-linejoin="round" ed:tosuperid="170" stroke="#f5c759" transform="matrix(1,0,0,1,420.16,1066.34)" stroke-linecap="round"/>
    <path fill="none" id="173" stroke-width="2" ed:parentid="170" d="M-6.5,33.1C-6.5,6.6,3.1,-33.1,17.5,-33.1" stroke-linejoin="round" ed:tosuperid="172" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,983.4)" stroke-linecap="round"/>
    <path fill="none" id="175" stroke-width="2" ed:parentid="170" d="M-17.5,49.7L-6.5,49.7C-6.5,9.9,3.1,-49.6,17.5,-49.6" stroke-linejoin="round" ed:tosuperid="174" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,966.85)" stroke-linecap="round"/>
    <path fill="none" id="177" stroke-width="2" ed:parentid="170" d="M-6.5,16.6C-6.5,3.3,3.1,-16.5,17.5,-16.5" stroke-linejoin="round" ed:tosuperid="176" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,999.95)" stroke-linecap="round"/>
    <path fill="none" id="180" stroke-width="2" ed:parentid="170" d="M-6.5,0C-6.5,0,3.1,-0,17.5,-0" stroke-linejoin="round" ed:tosuperid="179" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1016.5)" stroke-linecap="round"/>
    <path fill="none" id="182" stroke-width="2" ed:parentid="170" d="M-6.5,-16.5C-6.5,-3.3,3.1,16.5,17.5,16.5" stroke-linejoin="round" ed:tosuperid="181" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1033.05)" stroke-linecap="round"/>
    <path fill="none" id="186" stroke-width="2" ed:parentid="170" d="M-6.5,-33.1C-6.5,-6.6,3.1,33.1,17.5,33.1" stroke-linejoin="round" ed:tosuperid="185" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1049.6)" stroke-linecap="round"/>
    <path fill="none" id="188" stroke-width="2" ed:parentid="170" d="M-6.5,-49.6C-6.5,-9.9,3.1,49.6,17.5,49.6" stroke-linejoin="round" ed:tosuperid="187" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1066.15)" stroke-linecap="round"/>
    <path fill="none" id="190" stroke-width="2" ed:parentid="156" d="M-6.5,-128.1C-6.5,-25.6,3.1,128.1,17.5,128.1" stroke-linejoin="round" ed:tosuperid="189" stroke="#f5c759" transform="matrix(1,0,0,1,420.16,1244.25)" stroke-linecap="round"/>
    <path fill="none" id="192" stroke-width="2" ed:parentid="174" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="191" stroke="#f5c759" transform="matrix(1,0,0,1,786.36,917.2)" stroke-linecap="round"/>
    <path fill="none" id="254" stroke-width="2" ed:parentid="156" d="M-6.5,162.7C-6.5,32.5,3.1,-162.7,17.5,-162.7" stroke-linejoin="round" ed:tosuperid="253" stroke="#f5c759" transform="matrix(1,0,0,1,420.16,953.45)" stroke-linecap="round"/>
    <path fill="none" id="256" stroke-width="2" ed:parentid="253" d="M-17.5,30.3L-6.5,30.3C-6.5,6.1,3.1,-30.3,17.5,-30.3" stroke-linejoin="round" ed:tosuperid="255" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,760.41)" stroke-linecap="round"/>
    <path fill="none" id="258" stroke-width="2" ed:parentid="253" d="M-6.5,13.8C-6.5,2.8,3.1,-13.8,17.5,-13.8" stroke-linejoin="round" ed:tosuperid="257" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,776.96)" stroke-linecap="round"/>
    <path fill="none" id="264" stroke-width="2" ed:parentid="189" d="M-17.5,70.3L-6.5,70.3C-6.5,14.1,3.1,-70.3,17.5,-70.3" stroke-linejoin="round" ed:tosuperid="263" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1301.99)" stroke-linecap="round"/>
    <path fill="none" id="266" stroke-width="2" ed:parentid="263" d="M-17.5,41.4L-6.5,41.4C-6.5,8.3,3.1,-41.4,17.5,-41.4" stroke-linejoin="round" ed:tosuperid="265" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,1190.28)" stroke-linecap="round"/>
    <path fill="none" id="268" stroke-width="2" ed:parentid="263" d="M-6.5,24.8C-6.5,5,3.1,-24.8,17.5,-24.8" stroke-linejoin="round" ed:tosuperid="267" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,1206.83)" stroke-linecap="round"/>
    <path fill="none" id="270" stroke-width="2" ed:parentid="263" d="M-6.5,-8.3C-6.5,-1.7,3.1,8.3,17.5,8.3" stroke-linejoin="round" ed:tosuperid="269" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,1239.92)" stroke-linecap="round"/>
    <path fill="none" id="274" stroke-width="2" ed:parentid="189" d="M-6.5,4.1C-6.5,0.8,3.1,-4.1,17.5,-4.1" stroke-linejoin="round" ed:tosuperid="273" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1368.19)" stroke-linecap="round"/>
    <path fill="none" id="276" stroke-width="2" ed:parentid="273" d="M-17.5,8.3L-6.5,8.3C-6.5,1.7,3.1,-8.3,17.5,-8.3" stroke-linejoin="round" ed:tosuperid="275" stroke="#f5c759" transform="matrix(1,0,0,1,658.36,1355.78)" stroke-linecap="round"/>
    <path fill="none" id="278" stroke-width="2" ed:parentid="273" d="M-6.5,-8.3C-6.5,-1.7,3.1,8.3,17.5,8.3" stroke-linejoin="round" ed:tosuperid="277" stroke="#f5c759" transform="matrix(1,0,0,1,658.36,1372.32)" stroke-linecap="round"/>
    <path fill="none" id="284" stroke-width="2" ed:parentid="263" d="M-6.5,-41.4C-6.5,-8.3,3.1,41.4,17.5,41.4" stroke-linejoin="round" ed:tosuperid="283" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,1273.02)" stroke-linecap="round"/>
    <path fill="none" id="287" stroke-width="2" ed:parentid="263" d="M-6.5,8.3C-6.5,1.7,3.1,-8.3,17.5,-8.3" stroke-linejoin="round" ed:tosuperid="286" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,1223.38)" stroke-linecap="round"/>
    <path fill="none" id="289" stroke-width="2" ed:parentid="189" d="M-6.5,-37.2C-6.5,-7.4,3.1,37.2,17.5,37.2" stroke-linejoin="round" ed:tosuperid="288" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1409.56)" stroke-linecap="round"/>
    <path fill="none" id="291" stroke-width="2" ed:parentid="288" d="M-17.5,16.5L-6.5,16.5C-6.5,3.3,3.1,-16.5,17.5,-16.5" stroke-linejoin="round" ed:tosuperid="290" stroke="#f5c759" transform="matrix(1,0,0,1,658.36,1430.25)" stroke-linecap="round"/>
    <path fill="none" id="293" stroke-width="2" ed:parentid="288" d="M-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="292" stroke="#f5c759" transform="matrix(1,0,0,1,658.36,1446.8)" stroke-linecap="round"/>
    <path fill="none" id="295" stroke-width="2" ed:parentid="288" d="M-6.5,-16.5C-6.5,-3.3,3.1,16.5,17.5,16.5" stroke-linejoin="round" ed:tosuperid="294" stroke="#f5c759" transform="matrix(1,0,0,1,658.36,1463.35)" stroke-linecap="round"/>
    <path fill="none" id="297" stroke-width="2" ed:parentid="189" d="M-6.5,-70.3C-6.5,-14.1,3.1,70.3,17.5,70.3" stroke-linejoin="round" ed:tosuperid="296" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,1442.66)" stroke-linecap="round"/>
    <path fill="none" id="299" stroke-width="2" ed:parentid="296" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="298" stroke="#f5c759" transform="matrix(1,0,0,1,658.36,1513)" stroke-linecap="round"/>
    <path fill="none" id="305" stroke-width="2" ed:parentid="156" d="M-6.5,-231.5C-6.5,-46.3,3.1,231.5,17.5,231.5" stroke-linejoin="round" ed:tosuperid="304" stroke="#f5c759" transform="matrix(1,0,0,1,420.16,1347.69)" stroke-linecap="round"/>
    <path fill="none" id="307" stroke-width="2" ed:parentid="253" d="M-6.5,-2.8C-6.5,-0.6,3.1,2.8,17.5,2.8" stroke-linejoin="round" ed:tosuperid="306" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,793.51)" stroke-linecap="round"/>
    <path fill="none" id="309" stroke-width="2" ed:parentid="253" d="M-6.5,-30.3C-6.5,-6.1,3.1,30.3,17.5,30.3" stroke-linejoin="round" ed:tosuperid="308" stroke="#f5c759" transform="matrix(1,0,0,1,539.26,821.04)" stroke-linecap="round"/>
    <path fill="none" id="311" stroke-width="2" ed:parentid="308" d="M-17.5,11L-6.5,11C-6.5,2.2,3.1,-11,17.5,-11" stroke-linejoin="round" ed:tosuperid="310" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,840.37)" stroke-linecap="round"/>
    <path fill="none" id="313" stroke-width="2" ed:parentid="308" d="M-6.5,-11C-6.5,-2.2,3.1,11,17.5,11" stroke-linejoin="round" ed:tosuperid="312" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,862.32)" stroke-linecap="round"/>
    <path fill="none" id="317" stroke-width="2" ed:parentid="310" d="M-17.5,0L-6.5,0C-6.5,0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="316" stroke="#f5c759" transform="matrix(1,0,0,1,793.46,829.4)" stroke-linecap="round"/>
    <path fill="none" id="321" stroke-width="2" ed:parentid="263" d="M-6.5,-24.8C-6.5,-5,3.1,24.8,17.5,24.8" stroke-linejoin="round" ed:tosuperid="320" stroke="#f5c759" transform="matrix(1,0,0,1,674.36,1256.47)" stroke-linecap="round"/>
    <path fill="none" id="319" stroke-width="2" ed:parentid="156" d="M-17.5,231.5L-6.5,231.5C-6.5,46.3,3.1,-231.5,17.5,-231.5" stroke-linejoin="round" ed:tosuperid="318" stroke="#f5c759" transform="matrix(1,0,0,1,420.16,884.66)" stroke-linecap="round"/>
    <path fill="none" id="323" stroke-width="2" ed:parentid="318" d="M-17.5,22.5L-6.5,22.5C-6.5,4.5,3.1,-22.5,17.5,-22.5" stroke-linejoin="round" ed:tosuperid="322" stroke="#f5c759" transform="matrix(1,0,0,1,547.26,630.63)" stroke-linecap="round"/>
    <path fill="none" id="325" stroke-width="2" ed:parentid="318" d="M-6.5,7.6C-6.5,1.5,3.1,-7.6,17.5,-7.6" stroke-linejoin="round" ed:tosuperid="324" stroke="#f5c759" transform="matrix(1,0,0,1,547.26,645.58)" stroke-linecap="round"/>
    <path fill="none" id="327" stroke-width="2" ed:parentid="318" d="M-6.5,-7.4C-6.5,-1.5,3.1,7.4,17.5,7.4" stroke-linejoin="round" ed:tosuperid="326" stroke="#f5c759" transform="matrix(1,0,0,1,547.26,660.53)" stroke-linecap="round"/>
    <path fill="none" id="329" stroke-width="2" ed:parentid="318" d="M-6.5,-22.5C-6.5,-4.5,3.1,22.5,17.5,22.5" stroke-linejoin="round" ed:tosuperid="328" stroke="#f5c759" transform="matrix(1,0,0,1,547.26,675.68)" stroke-linecap="round"/>
    <path fill="none" id="334" stroke-width="2" ed:parentid="328" d="M-17.5,-0L-6.5,-0C-6.5,-0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="333" stroke="#f5c759" transform="matrix(1,0,0,1,697.56,698.2)" stroke-linecap="round"/>
    <path fill="none" id="340" stroke-width="2" ed:parentid="312" d="M-17.5,-0L-6.5,-0C-6.5,-0,3.1,0,17.5,0" stroke-linejoin="round" ed:tosuperid="339" stroke="#f5c759" transform="matrix(1,0,0,1,953.46,873.3)" stroke-linecap="round"/>
    <path fill="none" id="335" stroke-width="2" ed:parentid="229" d="M-17.5,22.4L-6.5,22.4C-6.5,4.5,3.1,-22.4,17.5,-22.4" stroke-linejoin="round" ed:tosuperid="332" stroke="#f5c759" transform="matrix(1,0,0,1,514.56,87.23)" stroke-linecap="round"/>
    <path fill="none" id="341" stroke-width="2" ed:parentid="229" d="M-6.5,7.5C-6.5,1.5,3.1,-7.5,17.5,-7.5" stroke-linejoin="round" ed:tosuperid="338" stroke="#f5c759" transform="matrix(1,0,0,1,514.56,102.18)" stroke-linecap="round"/>
    <path fill="none" id="343" stroke-width="2" ed:parentid="229" d="M-6.5,-7.5C-6.5,-1.5,3.1,7.5,17.5,7.5" stroke-linejoin="round" ed:tosuperid="342" stroke="#f5c759" transform="matrix(1,0,0,1,514.56,117.13)" stroke-linecap="round"/>
    <path fill="none" id="345" stroke-width="2" ed:parentid="229" d="M-6.5,-22.4C-6.5,-4.5,3.1,22.4,17.5,22.4" stroke-linejoin="round" ed:tosuperid="344" stroke="#f5c759" transform="matrix(1,0,0,1,514.56,132.08)" stroke-linecap="round"/>
    <path fill="none" id="347" stroke-width="2" ed:parentid="227" d="M-17.5,129.2L-6.5,129.2C-6.5,25.8,3.1,-129.2,17.5,-129.2" stroke-linejoin="round" ed:tosuperid="346" stroke="#f5c759" transform="matrix(1,0,0,1,299.46,162.5)" stroke-linecap="round"/>
    <g id="101" ed:layout="map" ed:width="108.912" ed:topictype="mainidea" transform="matrix(1,0,0,1,21,678.14)" ed:height="51.6">
        <path fill="#b60717" d="M25.8,0L83.1,0C97.4,0,108.9,11.6,108.9,25.8C108.9,40,97.4,51.6,83.1,51.6L25.8,51.6C11.6,51.6,0,40,0,25.8C0,11.6,11.6,0,25.8,0z" stroke-linejoin="round" stroke="#000000" fill-opacity="0.95"/>
        <text class="st29">
            <tspan style="white-space:pre" y="30.85" x="21" textLength="64.4">个人推荐</tspan>
        </text>
    </g>
    <g id="227" ed:layout="rightmap" ed:parentid="101" ed:width="89" transform="matrix(1,0,0,1,192.91,273.4)" ed:height="36.6">
        <g transform="translate(18.5,10.9)">
            <use xlink:href="#imgApprove" transform="translate(0,0)"/>
        </g>
        <text class="st30">
            <tspan style="white-space:pre" y="24.35" x="39" class="st31" textLength="32.4">优势</tspan>
        </text>
    </g>
    <symbol id="imgApprove">
        <image height="16" width="16" xlink:href=""/>
    </symbol>
    <g id="228" ed:layout="rightmap" ed:parentid="227" ed:width="109.6" transform="matrix(1,0,0,1,317.01,272)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="90">关注 JS 底层</tspan>
        </text>
    </g>
    <g id="229" ed:layout="rightmap" ed:parentid="227" ed:width="180" transform="matrix(1,0,0,1,317.01,96.35)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="160.4">关注技术的背景和意义</tspan>
        </text>
    </g>
    <g id="231" ed:layout="rightmap" ed:parentid="228" ed:width="164" transform="matrix(1,0,0,1,461.71,272)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="112.4">以执行上下文为</tspan>
            <tspan style="white-space:pre" x="121.8" class="st33" textLength="32.4">暗线</tspan>
        </text>
    </g>
    <g id="232" ed:layout="rightmap" ed:parentid="227" ed:width="196" transform="matrix(1,0,0,1,317.01,503.7)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="176.4">有一定的开发及实习经验</tspan>
        </text>
    </g>
    <g id="234" ed:layout="rightmap" ed:parentid="227" ed:width="535.8" transform="matrix(1,0,0,1,317.01,536.8)" ed:height="26.6">
        <g transform="translate(9.5,5.9)">
            <use xlink:href="#imgLove" transform="translate(0,0)"/>
        </g>
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="29" textLength="496.4">我有自己的优势和闪光点，希望您能给我一个展现自己最好一面的机会</tspan>
        </text>
    </g>
    <symbol id="imgLove">
        <image height="16" width="16" xlink:href=""/>
    </symbol>
    <g id="235" ed:layout="rightmap" ed:parentid="227" ed:width="132" transform="matrix(1,0,0,1,317.01,420.95)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="112.4">常见前端的误解</tspan>
        </text>
    </g>
    <g id="236" ed:layout="rightmap" ed:parentid="235" ed:width="84" transform="matrix(1,0,0,1,484.11,371.3)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">变量提升</tspan>
        </text>
    </g>
    <g id="237" ed:layout="rightmap" ed:parentid="235" ed:width="326.4" transform="matrix(1,0,0,1,484.11,404.4)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="306.8">Vue 并不是一个纯粹的 MVVM 模式的框架</tspan>
        </text>
    </g>
    <g id="238" ed:layout="rightmap" ed:parentid="235" ed:width="168.8" transform="matrix(1,0,0,1,484.11,437.5)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="149.2">JS 不是解释执行语言</tspan>
        </text>
    </g>
    <g id="239" ed:layout="rightmap" ed:parentid="235" ed:width="296.8" transform="matrix(1,0,0,1,484.11,470.6)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="277.2">JS 不是一个严格意义上的面向对象语言</tspan>
        </text>
    </g>
    <g id="240" ed:layout="rightmap" ed:parentid="227" ed:width="164" transform="matrix(1,0,0,1,317.01,172.7)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="144.4">每个项目都有所沉淀</tspan>
        </text>
    </g>
    <g id="242" ed:layout="rightmap" ed:parentid="231" ed:width="68" transform="matrix(1,0,0,1,660.81,205.8)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="48.4">作用域</tspan>
        </text>
    </g>
    <g id="243" ed:layout="rightmap" ed:parentid="231" ed:width="84" transform="matrix(1,0,0,1,660.81,238.9)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">作用域链</tspan>
        </text>
    </g>
    <g id="244" ed:layout="rightmap" ed:parentid="231" ed:width="52" transform="matrix(1,0,0,1,660.81,272)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">闭包</tspan>
        </text>
    </g>
    <g id="245" ed:layout="rightmap" ed:parentid="231" ed:width="116" transform="matrix(1,0,0,1,660.81,305.1)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="96.4">垃圾回收机制</tspan>
        </text>
    </g>
    <g id="246" ed:layout="rightmap" ed:parentid="231" ed:width="104.8" transform="matrix(1,0,0,1,660.81,338.2)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="85.2">JS 运行机制</tspan>
        </text>
    </g>
    <g id="142" ed:layout="rightmap" ed:parentid="240" ed:width="375" transform="matrix(1,0,0,1,516.11,172.7)" ed:height="26.6">
        <g transform="translate(9.5,5.9)">
            <use xlink:href="#imgSunny" transform="translate(0,0)"/>
        </g>
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="29" textLength="336.4">知道您忙，以思维导图展示，不妨点进去看一眼</tspan>
        </text>
    </g>
    <symbol id="imgSunny">
        <image height="16" width="16" xlink:href=""/>
    </symbol>
    <g id="151" ed:layout="rightmap" ed:parentid="236" ed:width="116" transform="matrix(1,0,0,1,603.21,371.3)" ed:height="26.6">
        <text class="st34">
            <tspan style="white-space:pre" y="19.35" x="9" class="st35" textLength="96.4">真的提升过吗</tspan>
        </text>
    </g>
    <g id="153" ed:layout="rightmap" ed:parentid="101" ed:width="117" transform="matrix(1,0,0,1,192.91,1097.88)" ed:height="36.6">
        <text class="st29">
            <tspan style="white-space:pre" y="24.35" x="18" textLength="80.4">百度事业群</tspan>
        </text>
    </g>
    <g id="156" ed:layout="rightmap" ed:parentid="153" ed:width="57.6" transform="matrix(1,0,0,1,345.01,1102.88)" ed:height="26.6">
        <text class="st36">
            <tspan style="white-space:pre" y="19.35" x="9" class="st37" textLength="38">MEG</tspan>
        </text>
    </g>
    <g id="166" ed:layout="rightmap" ed:parentid="156" ed:width="84" transform="matrix(1,0,0,1,437.71,1532.8)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">目前高管</tspan>
        </text>
    </g>
    <g id="168" ed:layout="rightmap" ed:parentid="166" ed:width="52" transform="matrix(1,0,0,1,556.81,1532.8)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">赵强</tspan>
        </text>
    </g>
    <g id="170" ed:layout="rightmap" ed:parentid="156" ed:width="84" transform="matrix(1,0,0,1,437.71,1003.2)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">商业体系</tspan>
        </text>
    </g>
    <g id="172" ed:layout="rightmap" ed:parentid="170" ed:width="116" transform="matrix(1,0,0,1,556.81,937)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="96.4">商业运营平台</tspan>
        </text>
    </g>
    <g id="174" ed:layout="rightmap" ed:parentid="170" ed:width="212" transform="matrix(1,0,0,1,556.81,903.9)" ed:height="26.6">
        <text class="st38">
            <tspan style="white-space:pre" y="19.35" x="9" class="st39" textLength="96.4">商业平台研发</tspan>
            <tspan style="white-space:pre" x="105.8" class="st40" textLength="16.4">（</tspan>
            <tspan style="white-space:pre" x="121.8" class="st37" textLength="32.4">核心</tspan>
            <tspan style="white-space:pre" x="153.8" class="st40" textLength="48.4">部门）</tspan>
        </text>
    </g>
    <g id="176" ed:layout="rightmap" ed:parentid="170" ed:width="52" transform="matrix(1,0,0,1,556.81,970.1)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">产品</tspan>
        </text>
    </g>
    <g id="179" ed:layout="rightmap" ed:parentid="170" ed:width="52" transform="matrix(1,0,0,1,556.81,1003.2)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">运营</tspan>
        </text>
    </g>
    <g id="181" ed:layout="rightmap" ed:parentid="170" ed:width="52" transform="matrix(1,0,0,1,556.81,1036.3)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">架构</tspan>
        </text>
    </g>
    <g id="185" ed:layout="rightmap" ed:parentid="170" ed:width="100" transform="matrix(1,0,0,1,556.81,1069.4)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="80.4">风控策略部</tspan>
        </text>
    </g>
    <g id="187" ed:layout="rightmap" ed:parentid="170" ed:width="100" transform="matrix(1,0,0,1,556.81,1102.5)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="80.4">智能实验室</tspan>
        </text>
    </g>
    <g id="189" ed:layout="rightmap" ed:parentid="156" ed:width="84" transform="matrix(1,0,0,1,437.71,1359.03)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">产品矩阵</tspan>
        </text>
    </g>
    <g id="191" ed:layout="rightmap" ed:parentid="174" ed:width="196" transform="matrix(1,0,0,1,803.91,903.9)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="176.4">负责所有商业平台的建设</tspan>
        </text>
    </g>
    <g id="253" ed:layout="rightmap" ed:parentid="156" ed:width="84" transform="matrix(1,0,0,1,437.71,777.42)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">组织调整</tspan>
        </text>
    </g>
    <g id="255" ed:layout="rightmap" ed:parentid="253" ed:width="180" transform="matrix(1,0,0,1,556.81,716.8)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="160.4">移动端的市场竞争激烈</tspan>
        </text>
    </g>
    <g id="257" ed:layout="rightmap" ed:parentid="253" ed:width="161.6" transform="matrix(1,0,0,1,556.81,749.9)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="142">合并百度app和搜索</tspan>
        </text>
    </g>
    <g id="263" ed:layout="rightmap" ed:parentid="189" ed:width="100" transform="matrix(1,0,0,1,556.81,1218.35)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="80.4">大文娱平台</tspan>
        </text>
    </g>
    <g id="265" ed:layout="rightmap" ed:parentid="263" ed:width="52" transform="matrix(1,0,0,1,691.91,1135.6)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">贴吧</tspan>
        </text>
    </g>
    <g id="267" ed:layout="rightmap" ed:parentid="263" ed:width="52" transform="matrix(1,0,0,1,691.91,1168.7)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">游戏</tspan>
        </text>
    </g>
    <g id="269" ed:layout="rightmap" ed:parentid="263" ed:width="52" transform="matrix(1,0,0,1,691.91,1234.9)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">小说</tspan>
        </text>
    </g>
    <g id="273" ed:layout="rightmap" ed:parentid="189" ed:width="84" transform="matrix(1,0,0,1,556.81,1350.75)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">信息分发</tspan>
        </text>
    </g>
    <g id="275" ed:layout="rightmap" ed:parentid="273" ed:width="87.2" transform="matrix(1,0,0,1,675.91,1334.2)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="67.6">百度 APP</tspan>
        </text>
    </g>
    <g id="277" ed:layout="rightmap" ed:parentid="273" ed:width="84" transform="matrix(1,0,0,1,675.91,1367.3)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">搜索业务</tspan>
        </text>
    </g>
    <g id="283" ed:layout="rightmap" ed:parentid="263" ed:width="228" transform="matrix(1,0,0,1,691.91,1301.1)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="208.4">瞄准腾讯，阿里占据娱乐市场</tspan>
        </text>
    </g>
    <g id="286" ed:layout="rightmap" ed:parentid="263" ed:width="84" transform="matrix(1,0,0,1,691.91,1201.8)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">好看视频</tspan>
        </text>
    </g>
    <g id="288" ed:layout="rightmap" ed:parentid="189" ed:width="84" transform="matrix(1,0,0,1,556.81,1433.5)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">知识垂类</tspan>
        </text>
    </g>
    <g id="290" ed:layout="rightmap" ed:parentid="288" ed:width="84" transform="matrix(1,0,0,1,675.91,1400.4)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">百度知道</tspan>
        </text>
    </g>
    <g id="292" ed:layout="rightmap" ed:parentid="288" ed:width="84" transform="matrix(1,0,0,1,675.91,1433.5)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">百度经验</tspan>
        </text>
    </g>
    <g id="294" ed:layout="rightmap" ed:parentid="288" ed:width="84" transform="matrix(1,0,0,1,675.91,1466.6)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">百度文库</tspan>
        </text>
    </g>
    <g id="296" ed:layout="rightmap" ed:parentid="189" ed:width="84" transform="matrix(1,0,0,1,556.81,1499.7)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">行业垂类</tspan>
        </text>
    </g>
    <g id="298" ed:layout="rightmap" ed:parentid="296" ed:width="84" transform="matrix(1,0,0,1,675.91,1499.7)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">百度网盘</tspan>
        </text>
    </g>
    <g id="304" ed:layout="rightmap" ed:parentid="156" ed:width="228" transform="matrix(1,0,0,1,437.71,1565.9)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="208.4">整个由百度副总：史有才负责</tspan>
        </text>
    </g>
    <g id="306" ed:layout="rightmap" ed:parentid="253" ed:width="116" transform="matrix(1,0,0,1,556.81,783)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="96.4">商业模式更改</tspan>
        </text>
    </g>
    <g id="308" ed:layout="rightmap" ed:parentid="253" ed:width="100" transform="matrix(1,0,0,1,556.81,838.05)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="80.4">智能小程序</tspan>
        </text>
    </g>
    <g id="310" ed:layout="rightmap" ed:parentid="308" ed:width="84" transform="matrix(1,0,0,1,691.91,816.1)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="64.4">战略合作</tspan>
        </text>
    </g>
    <g id="312" ed:layout="rightmap" ed:parentid="308" ed:width="244" transform="matrix(1,0,0,1,691.91,860)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="224.4">打造标杆，类似爱奇艺，携程等</tspan>
        </text>
    </g>
    <g id="316" ed:layout="rightmap" ed:parentid="310" ed:width="116" transform="matrix(1,0,0,1,811.01,816.1)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="96.4">知乎，有赞等</tspan>
        </text>
    </g>
    <g id="320" ed:layout="rightmap" ed:parentid="263" ed:width="116" transform="matrix(1,0,0,1,691.91,1268)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="96.4">智能小程序等</tspan>
        </text>
    </g>
    <g id="318" ed:layout="rightmap" ed:parentid="156" ed:width="92" transform="matrix(1,0,0,1,437.71,641.05)" ed:height="24.2">
        <text class="st34">
            <tspan style="white-space:pre" y="17.75" x="9" textLength="72.4">百度的奋起</tspan>
        </text>
    </g>
    <g id="322" ed:layout="rightmap" ed:parentid="318" ed:width="64.8" transform="matrix(1,0,0,1,564.81,596.4)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="45.2">AI 方向</tspan>
        </text>
    </g>
    <g id="324" ed:layout="rightmap" ed:parentid="318" ed:width="74.40000000000001" transform="matrix(1,0,0,1,564.81,626.3)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="54.8">自动驾驶</tspan>
        </text>
    </g>
    <g id="326" ed:layout="rightmap" ed:parentid="318" ed:width="125.6" transform="matrix(1,0,0,1,564.81,656.2)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="106">最新财报：314亿</tspan>
        </text>
    </g>
    <g id="328" ed:layout="rightmap" ed:parentid="318" ed:width="115.2" transform="matrix(1,0,0,1,564.81,686.5)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="95.6">百度智能云服务</tspan>
        </text>
    </g>
    <g id="333" ed:layout="rightmap" ed:parentid="328" ed:width="448" transform="matrix(1,0,0,1,715.11,686.1)" ed:height="24.2">
        <text class="st34">
            <tspan style="white-space:pre" y="17.75" x="9" textLength="428.4">目前两会重点方向：Ai 云计算和实体经济的结合-加速智能云的发展</tspan>
        </text>
    </g>
    <g id="339" ed:layout="rightmap" ed:parentid="312" ed:width="516" transform="matrix(1,0,0,1,971.01,849.2)" ed:height="48.2">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="32.4">目前</tspan>
            <tspan style="white-space:pre" x="41.8" class="st42" textLength="48.4">爱奇艺</tspan>
            <tspan style="white-space:pre" x="89.8" textLength="192.4">作为百度旗下的公司尤其是</tspan>
            <tspan style="white-space:pre" x="281.8" class="st37" textLength="32.4">会员</tspan>
            <tspan style="white-space:pre" x="313.8" textLength="192">收入，在百度整个营收是占</tspan>
            <tspan style="white-space:pre" y="40.95" x="9" textLength="112.4">有较大的比例的</tspan>
        </text>
    </g>
    <g id="332" ed:layout="rightmap" ed:parentid="229" ed:width="36" transform="matrix(1,0,0,1,532.11,53.1)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="16.4">TS</tspan>
        </text>
    </g>
    <g id="338" ed:layout="rightmap" ed:parentid="229" ed:width="71.2" transform="matrix(1,0,0,1,532.11,83)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="51.6">TimSort</tspan>
        </text>
    </g>
    <g id="342" ed:layout="rightmap" ed:parentid="229" ed:width="83.2" transform="matrix(1,0,0,1,532.11,112.9)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="63.6">虚拟 Dom</tspan>
        </text>
    </g>
    <g id="344" ed:layout="rightmap" ed:parentid="229" ed:width="179.2" transform="matrix(1,0,0,1,532.11,142.8)" ed:height="23.4">
        <text class="st41">
            <tspan style="white-space:pre" y="16.95" x="9" textLength="159.6">Teleport（传送门) 新特性</tspan>
        </text>
    </g>
    <g id="346" ed:layout="rightmap" ed:parentid="227" ed:width="404" transform="matrix(1,0,0,1,317.01,20)" ed:height="26.6">
        <text class="st32">
            <tspan style="white-space:pre" y="19.35" x="9" textLength="384.4">首先感谢您，抽出时间阅读，也非常期待能够和您共事</tspan>
        </text>
    </g>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Ow0KdmFyIHVhID0gKG11YS5pbmRleE9mKCdydjoxMScpICsgbXVhLmluZGV4T2YoJ01TSUUnKSkgPj0gMDsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmctY29udGFpbmVyJykub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChldmVudCkgew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQp9DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZnLWNvbnRhaW5lcicpLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgaWYgKGV2ZW50LndoaWNoID09IDMpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQogICAgICAgIHRoaXMub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsNCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnkoLShldi5tb3ZlbWVudFgpLCAwKTsNCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtKGV2Lm1vdmVtZW50WSkpDQogICAgICAgIH0NCiAgICAgICAgdGhpcy5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmN1cnNvciA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2V1cCA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2Vtb3ZlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCk51bWJlci5wcm90b3R5cGUudG9zdWl0c3ZnID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBudW0gPSB0aGlzLnZhbHVlT2YoKTsNCiAgICBpZiAobnVtICUgMSA9PT0gMCkgew0KICAgICAgICByZXR1cm4gbnVtICsgMC41DQogICAgfSBlbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzeiA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbnVtID0gdGhpcy52YWx1ZU9mKCk7DQogICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtOw0KfTsNCmZ1bmN0aW9uIHBhcnNlRGF0ZShudW0pIHsNCiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG51bSk7DQogICAgdmFyIFkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7DQogICAgdmFyIE0gPSAoZGF0ZS5nZXRNb250aCgpICsgMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG1tICsgczsNCn0NCi8vLS1wcmVkZWZpbmVkDQovL2NvbW1lbnQtLQ0KDQpmdW5jdGlvbiBnZXRjd2gocG9wdXApIHsNCiAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgdmFyIHcgPSBwb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCiAgICByZXR1cm4gW3csIGhdDQp9DQpzdmdFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN2ZyIpOw0KZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAvLyB2YXIgY29tbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdmc6bnRoLWNoaWxkKCcgKyBpbmRleCArICcpIGc+Z1tlZFxcOmNvbW1lbnRdJyk7DQogICAgdmFyIGNvbW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3ZnOm50aC1jaGlsZCgke2luZGV4fSkgZz5nW2VkXFw6Y29tbWVudF1gKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgb2xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgY29tbWVudHNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoY29tbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdlZDpjb21tZW50JykpOw0KICAgICAgICB2YXIgaGVpZ2h0ID0gMDsNCiAgICAgICAgdmFyIGNhcnIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICB2YXIgc3RhbXAgPSBOdW1iZXIoYVtqXS5EYXRlKSAqIDEwMDA7DQogICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgICAgICB2YXIgbmFtZSA9IGFbal0uTmFtZTsNCiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gYVtqXS5NZXNzYWdlOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2VBcnIgPSBtZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCd4JywgNSk7DQogICAgICAgICAgICBuLnNldEF0dHJpYnV0ZSgneScsIDEyKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywgJyMwMDZlZmYnKTsNCiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuYW1lICsgJzogJzsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd4JywgMjAwKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd5JywgMTIpOw0KICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzk2OTY5NicpOw0KICAgICAgICAgICAgdC50ZXh0Q29udGVudCA9IHRpbWU7DQogICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnZm9udC1zaXplJywgJzEwJyk7DQogICAgICAgICAgICBtLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgyMCwyNyknKTsNCiAgICAgICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzc2FnZUFyci5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIHZhciB0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndHNwYW4nKTsNCiAgICAgICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgICAgIHRzLnNldEF0dHJpYnV0ZSgneScsIGsgKiAxNik7DQogICAgICAgICAgICAgICAgdHMudGV4dENvbnRlbnQgPSBtZXNzYWdlQXJyW2tdOw0KICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKTsNCiAgICAgICAgICAgIG8uYXBwZW5kQ2hpbGQobik7DQogICAgICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICAgICAgby5hcHBlbmRDaGlsZChtKTsNCiAgICAgICAgICAgIGNhcnIucHVzaChvKTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICAgICAgaGVpZ2h0ID0gKG1lc3NhZ2VBcnIubGVuZ3RoICsgMSkgKiAxNiArIGhlaWdodDsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgd2FyciA9IGdldGN3aChwb3B1cCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneCcsICcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgIHZhciBvdyA9IHdhcnJbMF0gKyAxMC41Ow0KICAgICAgICB2YXIgb2ggPSB3YXJyWzFdICsgMzsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG93KTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvaCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNjU2NTY1Jyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgdmFyIGwgPSBjYXJyLmxlbmd0aDsNCiAgICAgICAgd2hpbGUgKGwtLSkgew0KICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY2FycltsXSk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBwb3B1cC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgY3MgPSBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcyA9IGNvbW1lbnRzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAndHInKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQocHBzWzFdKTsNCiAgICAgICAgICAgIHggPSB4LnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ21hJykgew0KICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICB2YXIgbWFBcnIgPSBbcGFyc2VGbG9hdChwcHNbMV0pLCBwYXJzZUZsb2F0KHBwc1szXSksIHBhcnNlRmxvYXQocHBzWzVdKSwgcGFyc2VGbG9hdChwcHNbN10pLCBwYXJzZUZsb2F0KHBwc1s5XSksIHBhcnNlRmxvYXQocHBzWzExXSldOw0KICAgICAgICAgICAgaWYgKG1hQXJyWzFdID09IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4MSA9IHgxLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgIHkxID0geTEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB5ID0gcGFyc2VGbG9hdChjc1sxXSk7DQogICAgICAgICAgICAgICAgdmFyIHgyID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgdmFyIGZ4ID0geDEgPCB4MiA/IHgxLnRvc3VpdHN2ZygpIDogeDIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIGZ5ID0geTEgPiB5MiA/IHkxLnRvc3VpdHN2ZygpIDogeTIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyBmeCArICcsJyArIGZ5ICsgJyknOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG9mZnkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd5JywgKC1vZmZ5KS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3RyYW5zcGFyZW50Jyk7DQogICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIHRyc3RyKTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdjb21tZW50JywgJycpOw0KICAgICAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsZXQgY29tbWVudGlkID0gY29tbWVudHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgY29tbWVudHNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpjb21tZW50aWQnLCBjb21tZW50aWQpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBjb21tZW50c1tpXS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmICghdWEpIHsNCiAgICBmdW5jdGlvbiBnZXR3aChzLCBwKSB7DQogICAgICAgIHZhciBtYWlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBtYWlucC5zdHlsZS5jc3NUZXh0ID0gczsNCiAgICAgICAgbWFpbnAuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7DQogICAgICAgIG1haW5wLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICBtYWlucC5pbm5lckhUTUwgPSBwOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5wKTsNCiAgICAgICAgLy8gdmFyIHcgPSBtYWlucC5jbGllbnRXaWR0aDsNCiAgICAgICAgLy8gdmFyIGggPSBtYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGxldCB7IHdpZHRoLGhlaWdodCB9ID0gbWFpbnAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICAgICAgIHZhciB3ID0gTWF0aC5jZWlsKHdpZHRoKQ0KICAgICAgICB2YXIgaCA9IE1hdGguY2VpbChoZWlnaHQpDQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csIGhdDQogICAgfQ0KICAgIHN2Z0VsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnIik7DQogICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgdmFyIG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKSBnPmdbZWRcXDpub3RlXScpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IG5vdGVzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6bm90ZScpOw0KICAgICAgICAgICAgdmFyIG5vdGVMb2NrID0gbm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlbG9jaycpOw0KICAgICAgICAgICAgaWYgKG5vdGVMb2NrID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIG1haW5wID0gYS5tYXRjaCgvPGJvZHlbXj5dKj4oLiopPFwvYm9keT4vKVsxXTsNCiAgICAgICAgICAgIHZhciBtYWlucyA9IGEubWF0Y2goL3N0eWxlPSIoLio/KSIvKVsxXTsNCiAgICAgICAgICAgIHZhciBvdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBvbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgaG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjY2RjZGZmJyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbm90ZXNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgbm90ZXNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dCA9IG1haW5zOw0KICAgICAgICAgICAgcG9wdXAuaW5uZXJIVE1MID0gbWFpbnA7DQogICAgICAgICAgICB2YXIgd2ggPSBnZXR3aChtYWlucywgbWFpbnApOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdoWzBdKTsNCiAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2hbMV0pOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDgsNCknKTsNCiAgICAgICAgICAgIHBvcHVwLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnOw0KICAgICAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2hbMF0gKyAxNik7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHdoWzFdICsgOCk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjYTI3YTAwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZTc5ZCcpOw0KICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdub3RlJywgJycpOw0KICAgICAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBsZXQgbm90ZWlkID0gbm90ZXNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgbm90ZXNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ2VkOm5vdGVpZCcsIG5vdGVpZCk7DQogICAgICAgICAgICBvdXQub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBvdXQub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVSYW5nZSh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmUpOmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHZhciBjcyA9IG5vdGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciBwcyA9IG5vdGVzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgICAgIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ3RyJykgew0KICAgICAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHBwc1sxXSk7DQogICAgICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICAgICAgdmFyIG1hQXJyID0gW3BhcnNlRmxvYXQocHBzWzFdKSwgcGFyc2VGbG9hdChwcHNbM10pLCBwYXJzZUZsb2F0KHBwc1s1XSksIHBhcnNlRmxvYXQocHBzWzddKSwgcGFyc2VGbG9hdChwcHNbOV0pLCBwYXJzZUZsb2F0KHBwc1sxMV0pXTsNCiAgICAgICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoY3NbMV0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICAgICAgeDEgPSB4MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNlRmxvYXQoY3NbMV0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgICAgIHZhciBmeCA9IHgxIDwgeDIgPyB4MS50b3N1aXRzdmcoKSA6IHgyLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgZnggKyAnLCcgKyBmeSArICcpJzsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgneScsICgtb2ZmeSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChvdXQpOw0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgLy8gdmFyIG5vdGVpZCA9IG5vdGVpZDsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyB2YXIgbm90ZWlkID0gbm90ZWlkOw0KICAgICAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0gZWxzZSB7DQogICAgY29uc29sZS5sb2coJ+aKseatie+8jElF5rWP6KeI5Zmo5LiN5pSv5oyBbm90Zeino+aekO+8jOivt+S9v+eUqOWFtuS7luWGheaguOa1j+iniOWZqOOAguiwouiwou+8gScpDQp9DQovLy0tbm90ZQ0KLy9oeXBlcmxpbmstLQ0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFyciwgYnJyKSB7DQogICAgdmFyIGwgPSAwOw0KICAgIHZhciBsbCA9IDA7DQogICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgaWYgKCFpc05hTihsaW5rYXJyW2pdKSkgew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9ICdQYWdlLScgKyBhcnJbal07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gYXJyW2pdOw0KICAgICAgICB9DQogICAgICAgIGUuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICB2YXIgZXcgPSBlLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQgPSBicnJbal07DQogICAgICAgIGguc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGguc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodyA9IGguZ2V0QkJveCgpLndpZHRoOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5yZW1vdmVDaGlsZChoKTsNCiAgICAgICAgbCA9IGV3ID4gaHcgPyBldyA6IGh3Ow0KICAgICAgICBsbCA9IGwgPiBsbCA/IGwgOiBsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0Kc3ZnRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdmciKTsNCmZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gc3ZnRWxlbXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgbGV0IHN2Z0VsZW0gPSBzdmdFbGVtc1tpbmRleF07DQogICAgbGV0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnOm50aC1jaGlsZCgiICsgaW5kZXggKyAiKSBnPmdbZWRcXDpoeXBlcmxpbmtdIikNCiAgICBjb25zb2xlLmxvZyhsaW5rcyk7DQogICAgLy8gdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOmh5cGVybGlua10nKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgZGVzY2FyciA9IFtdOw0KICAgICAgICB2YXIgbGlua2FyciA9IFtdOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2NkY2RmZicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykpOw0KICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsaW5rc1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgICAgIHZhciBjcyA9IGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHBzID0gbGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpOw0KICAgICAgICBpZiAocHMuc3Vic3RyKDAsIDIpID09ICd0cicpIHsNCiAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIHBhcnNlRmxvYXQocHBzWzBdKTsNCiAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChwcHNbMV0pOw0KICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB5ID0geS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIHggKyAnLCcgKyB5ICsgJyknOw0KICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goLyhcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylcKSQvKTsNCiAgICAgICAgICAgIHZhciBtYUFyciA9IFtwYXJzZUZsb2F0KHBwc1sxXSksIHBhcnNlRmxvYXQocHBzWzNdKSwgcGFyc2VGbG9hdChwcHNbNV0pLCBwYXJzZUZsb2F0KHBwc1s3XSksIHBhcnNlRmxvYXQocHBzWzldKSwgcGFyc2VGbG9hdChwcHNbMTFdKV07DQogICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHgxID0geDEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4MSArICcsJyArIHkxICsgJyknOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHkgPSBwYXJzZUZsb2F0KGNzWzFdKTsNCiAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTIgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB2YXIgZnggPSB4MSA8IHgyID8geDEudG9zdWl0c3ZnKCkgOiB4Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgb2ZmeSA9IE1hdGguYWJzKHkxIC0geTIpOw0KICAgICAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIGZ4ICsgJywnICsgZnkgKyAnKSc7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ3knLCAoLW9mZnkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChwb3B1cFIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBhbCA9IGEubGVuZ3RoOw0KICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsOyBqKyspIHsNCiAgICAgICAgICAgIGxpbmthcnIucHVzaChhW2pdLmxpbmspOw0KICAgICAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgIHZhciBtYXggPSBnZXRtYXhsZW4obGlua2FyciwgZGVzY2Fycik7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYWw7IGsrKykgew0KICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2EnKTsNCiAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIGlmIChpc05hTihsaW5rYXJyW2tdKSkgew0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInhsaW5rIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCBsaW5rYXJyW2tdKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOw0KICAgICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBsaW5rYXJyW2tdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBlLnRleHRDb250ZW50ID0gJ1BhZ2UtJyArIGxpbmthcnJba107DQogICAgICAgICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAieGxpbmsiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpOw0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsICIjIiArIGxpbmthcnJba10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbWF4ICsgMTApOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICczMycpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjOTk5OTk5Jyk7DQogICAgICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLCAzMyAqIGspOw0KICAgICAgICAgICAgZi50ZXh0Q29udGVudCA9IGRlc2NhcnJba107DQogICAgICAgICAgICBmLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOw0KICAgICAgICAgICAgZi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOw0KICAgICAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMTIpOw0KICAgICAgICAgICAgZS5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JzsNCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMjgpOw0KICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGMuYXBwZW5kQ2hpbGQoZCk7DQogICAgICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICAgICAgYy5hcHBlbmRDaGlsZChlKTsNCiAgICAgICAgICAgIGMub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZmlsbCA9ICcjZTFlMWZmJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGMub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsID0gJ3doaXRlJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGMpOw0KICAgICAgICB9DQogICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywgJycpOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2VkOmxpbmtpZCcsIGxpbmtzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCArICIsIiArIGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBwb3B1cC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9ubW91c2VvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdmctY29udGFpbmVyID4gc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKScpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpsaW5raWQ9JyIgKyBsaW5raWQgKyAiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgLy8gcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8vIHZhciBsaW5raWQgPSB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIiArIGxpbmtpZCArICInXVtoeXBlcmxpbmtdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIC8vIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vLS1oeXBlcmxpbmsNCi8vaW5pdGlhbGl6ZS0tDQp2YXIgc2hhcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9ndG9waWNpZF0nKTsNCnZhciBtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlID0ge307DQp2YXIgZXh0cmFSZWxhID0ge307DQp2YXIgY2hlY2tJRCA9ICcnOw0KZm9yICh2YXIgaSA9IDA7IGkgPCBtSWQubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgdHlwZSA9IG1JZFtpXS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBzaWQgPSBtSWRbaV0uaWQ7DQogICAgaWYgKHR5cGUgIT09ICdjYWxsb3V0Jykgew0KICAgICAgICBpbml0KHNpZCwgZGF0YVRyZWUpDQogICAgfQ0KfQ0KZnVuY3Rpb24gaW5pdChpZCwgb2JqKSB7DQogICAgdmFyIGNoaWxkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddOm5vdChbZWRcXDp0b3BpY3R5cGVdKSIpOw0KICAgIHZhciBjYWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddW2VkXFw6dG9waWN0eXBlXSIpOw0KICAgIHZhciBzdW1tYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nc3VtbWFyeSddIik7DQogICAgdmFyIGJvdW5kYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpmcm9taWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgdmFyIHJlbGF0byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDp0b2lkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIG9ialsibSIgKyBpZF0gPSB7fTsNCiAgICB2YXIgdHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBpdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6aGVpZ2h0Jyk7DQogICAgaWYgKHR5cGUpIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS50eXBlID0gdHlwZTsNCiAgICB9DQogICAgaWYgKGl3ICYmIGloKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPSBpdzsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5oZWlnaHQgPSBpaDsNCiAgICB9DQogICAgaWYgKHJlbGFmcm9tLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYWZyb20ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBpbmRleGlkID0gcmVsYWZyb21baV0uaWQ7DQogICAgICAgICAgICB2YXIgdG9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9pZCcpOw0KICAgICAgICAgICAgaWYgKGV4dHJhUmVsYVtpbmRleGlkXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdID0gew0KICAgICAgICAgICAgICAgICAgICBpZDogaW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDogdG9pZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tW2luZGV4aWRdID0ge307DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tLmRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAocmVsYXRvLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0byA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGF0by5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGluZGV4aWQgPSByZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5kZXhpZCkuZ2V0QXR0cmlidXRlKCdlZDpmcm9taWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogZnJvbWlkLA0KICAgICAgICAgICAgICAgICAgICB0b2lkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0b1tpbmRleGlkXSA9IHt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndXNlJylbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykuc2xpY2UoMSk7DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnRvZ3R5cGUgPSB0b2c7DQogICAgICAgIH0NCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBjaGlsZHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jaGlsZCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmNhbGwgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNhbGxzW2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uY2FsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBib3VuZGFyeVtpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoc3VtbWFyeS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5zdW1tYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IHN1bW1hcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5zdW1tYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8vLS1pbml0aWFsaXplDQovL3RvZ2dsZWRpc3BsYXktLQ0KdmFyIGNoYWluQXJyID0gW107DQpmdW5jdGlvbiBnZXRjaGFpbihpZCkgew0KICAgIGNoYWluQXJyLnVuc2hpZnQoJ20nICsgaWQpOw0KICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmICghcGFyZW50KSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKHBhcmVudC5tYXRjaCgvXCwvKSkgew0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQubWF0Y2goL1xkKyg/PVwsKS8pWzBdDQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFyciA9IFtdOw0KICAgIGdldGNoYWluKGlkKTsNCiAgICB2YXIgbWFpbiA9IGNoYWluQXJyWzBdOw0KICAgIGlmIChjaGFpbkFyci5sZW5ndGggPiAxKSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhaW5BcnIpOw0KICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoYWluQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IGNoYWluQXJyW2ldOw0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgdmFyIGNvYmogPSBvYmpbT2JqZWN0LmtleXMob2JqKVtqXV1bYV07DQogICAgICAgICAgICAgICAgaWYgKGNvYmopIHsNCiAgICAgICAgICAgICAgICAgICAgb2JqID0gY29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0NCg0KfQ0KZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgew0KICAgIHNoYXBlW2ldLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpZCA9IE51bWJlcih0aGlzLmdldEF0dHJpYnV0ZSgnZWQ6dG9ndG9waWNpZCcpKTsNCiAgICAgICAgdmFyIG9iaiA9IGdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGUgPSBvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyA/ICdwbHVzJyA6ICdtaW51cyc7DQogICAgICAgIHZhciBkaXNwbGF5ID0gb2JqLnRvZ3R5cGUgPT09ICdtaW51cycgPyAnbm9uZScgOiAnYmxvY2snOw0KICAgICAgICB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1c2UnKVswXS5zZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCAnIycgKyB0eXBlKTsNCiAgICAgICAgb2JqLnRvZ3R5cGUgPSB0eXBlOw0KICAgICAgICBjaGVja0lEID0gb2JqOw0KDQogICAgICAgIHV0ZChvYmosIGlkLCBkaXNwbGF5KTsNCiAgICAgICAgZXh0cmFSZWxhRmluKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gdXRkKG9iaiwgaWQsIHNob3csIG9jKSB7DQoNCiAgICB2YXIgcHNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKSB7DQogICAgICAgIGlmIChvYmoucmVsYWZyb20uZGlzcGxheSAhPT0gcHNob3cpIHsNCiAgICAgICAgICAgIHZhciByZWxhZnJvbXMgPSBPYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmoucmVsYWZyb20uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmoucmVsYXRvKSB7DQogICAgICAgIGlmIChvYmoucmVsYXRvLmRpc3BsYXkgIT09IHBzaG93KSB7DQogICAgICAgICAgICB2YXIgcmVsYXRvcyA9IE9iamVjdC5rZXlzKG9iai5yZWxhdG8pOw0KICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZWxhdG9zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0MgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqLnJlbGF0by5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5jYWxsKSB7DQogICAgICAgIHZhciBjYWxscyA9IE9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYgKGNoZWNrSUQgIT09IG9iaikgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBhID0gY2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouY2FsbFtjYWxsc1tpXV07DQogICAgICAgICAgICAgICAgdmFyIGMgPSBiLnRvZ3R5cGU7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20gJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYi5yZWxhdG8uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3MgPSBPYmplY3Qua2V5cyhiLnJlbGF0byk7DQogICAgICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGF0b3MubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYykgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdtaW51cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsIHx8IGIuYm91bmRhcnkgfHwgYi5zdW1tYXJ5KSAmJiBjID09PSAncGx1cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93LCB0cnVlKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmNhbGwgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnN1bW1hcnkgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouc3VtbWFyeSkgew0KICAgICAgICB2YXIgc3VtbWFyeXMgPSBPYmplY3Qua2V5cyhvYmouc3VtbWFyeSk7DQogICAgICAgIGlmICgoY2hlY2tJRCAhPT0gb2JqICYmIChvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyB8fCAhb2JqLnRvZ3R5cGUpKSB8fCBjaGVja0lEID09PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgYSA9IHN1bW1hcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBvc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5nZXRBdHRyaWJ1dGUoJ2VkOnBhcmVudGlkJyk7DQogICAgICAgICAgICAgICAgaWYgKG9zcC5tYXRjaCgvXCwvKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwYSA9IG9zcC5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwTCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvc3BhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyA9PSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3NwYVtqXSkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NwTCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcEwrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAob3NwTCAhPT0gb3NwYS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBiID0gb2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGMpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIithKyInXSIpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYoYz09PSdtaW51cycpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZiAoYi5jYWxsJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouYm91bmRhcnkpIHsNCiAgICAgICAgdmFyIGJvdW5kYXJ5cyA9IE9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmIChjaGVja0lEICE9PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnlzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIGEgPSBib3VuZGFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouYm91bmRhcnlbYm91bmRhcnlzW2ldXTsNCiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3cpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGIuY2FsbCYmIWMpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYikubGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoIW9jICYmIG9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB2YXIgdFNQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigicGF0aFtlZFxcOnRvc3VwZXJpZD0nIiArIGEgKyAiJ10iKTsNCiAgICAgICAgICAgIGlmICh0U1BhdGgpIHsNCiAgICAgICAgICAgICAgICB0U1BhdGguc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgbm90ZVRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpub3RldG89JyIgKyBhICsgIiddIik7DQogICAgICAgICAgICBpZiAobm90ZVRpcCkgew0KICAgICAgICAgICAgICAgIG5vdGVUaXAuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGFmcm9tLmRpc3BsYXkgIT09IHNob3cpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICByZWxhZnJvbXMuc3BsaWNlKHJlbGFmcm9tcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGFmcm9tcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0by5kaXNwbGF5ICE9PSBzaG93KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zID0gT2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYXRvcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKChiLmNhbGwgfHwgYi5ib3VuZGFyeSB8fCBiLnN1bW1hcnkpICYmIGMgPT09ICdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdywgdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5jYWxsICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSAmJiAhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBleHRyYVJlbGFGaW4oKSB7DQogICAgdmFyIGV4dHJha2V5cyA9IE9iamVjdC5rZXlzKGV4dHJhUmVsYSk7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRyYWtleXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGV4dHJhT2JqID0gZXh0cmFSZWxhW2V4dHJha2V5c1tpXV07DQogICAgICAgIGlmIChleHRyYU9iai5pc0MgPT09IHRydWUpIHsNCiAgICAgICAgICAgIHZhciBmc2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmoudG9pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmouaWQpLnN0eWxlLmRpc3BsYXkgPSBmc2hvdyAmJiB0c2hvdyA/ICdibG9jaycgOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
